package com.gonsin.gview.annotations.board;

import com.gonsin.gview.annotations.enums.ButtonAction;
import com.gonsin.gview.annotations.enums.ButtonStyle;
import com.gonsin.gview.annotations.enums.ButtonType;
import com.gonsin.gview.annotations.impl.EmptyBatchActionImpl;
import com.gonsin.gview.annotations.impl.EmptyConfirmActionImpl;
import com.gonsin.gview.annotations.impl.EmptyFileActionImpl;
import com.gonsin.gview.annotations.interfaces.IBatchActionListener;
import com.gonsin.gview.annotations.interfaces.IConfirmActionListener;
import com.gonsin.gview.annotations.interfaces.IFileActionListener;
import com.gonsin.gview.annotations.board.table.GProp;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GButton  {

    /**
     * 是否有效
     */
    boolean enable() default true;

    /**
     * 按钮显示的名字
     */
    String name() default "";

    /**
     * 按钮前显示的小图标
     */
    String icon() default "";

    /**
     * 按钮点击所执行的内容
     */
    ButtonAction action() ;

    /**
     * 直接修改浏览器的路径跳转到某个连接
     */
    String link() default "";

    /**
     * 跳转到某个view，action=PAGE有效
     */
    String view() default "";

//    /**
//     * 点击按钮跳转的页面，action=PAGE 有效
//     */
//    String target() default "";

//    /**
//     * 以窗口的形式打开某个view
//     */
//    String viewDialog() default "";

    /**
     * action = OPEN_DIALOG、PAGE、link有效 传递的参数
     */
    GProp[] props() default {};

    /**
     * 点击批量操作之后的回调 action = batch_action时有效
     */
    Class<? extends IBatchActionListener> batchAction() default EmptyBatchActionImpl.class;

    /**
     * 点击批量操作之后的回调 action = batch_action时有效
     */
    String batchActionClass() default "";

    /**
     * 点击上传文件之后的回调，action = File_upload时有效
     */
    Class<? extends IFileActionListener> fileAction() default EmptyFileActionImpl.class;

    /**
     * 点击上传文件之后的回调，action = File_upload时有效
     */
    String fileActionClass() default "";

    /**
     * 确认执行某种事情的回调，action = Confirm时有效
     */
    Class<? extends IConfirmActionListener> confirmAction() default EmptyConfirmActionImpl.class;

    /**
     * 确认信息的事件回调，action = Confirm时有效
     */
    String confirmActionClass() default "";

    /**
     * 弹出确认框的提示语，action = Confirm时有效
     */
    String confirmMessage() default "";

    /**
     * 下载路径,action = Download时有效
     */
    String downloadUrl() default "";

    /**
     * 文本颜色
     */
    String textColor() default "#FFFFFF";


    /**
     * 按钮的颜色
     */
    ButtonType buttonType() default ButtonType.DEFAULT;


    /**
     * 按钮的风格
     */
    ButtonStyle buttonStyle() default ButtonStyle.DEFAULT;

    /**
     * 事件传递时候，调用的@GAction的名字，action = UPLOAD_FILE\DOWNLOAD\BATCH\CONFIRM 时候有效
     */
    String actionName() default "";

    /**
     * 支持的文件格式，例如   .apk,.jar,.gonsin,。jpg
     */
    String accept() default ".*";

    /**
     * 接收文件个数，如果多个，收到的字符串为  /files/xxx.xx,/files/xxx.yy
     */
    int limit() default 1;

    /**
     * 根据条件隐藏或显示
     */
    String showIf() default "1";

    /**
     * 根据条件禁用
     */
    String disableIf() default "0";

    /**
     * 可支持的文件上传类型，如果是file，表示只支持文件
     * 如果是path，表示支持文件和文件夹
     * @return
     */
    String fileUploadType() default "file";


    /**
     * 是否为外部链接，如果是则跳转时候会带上token
     * action = link 时有效
     */
    boolean outLink() default false;


    /**
     * 2024/0/24 新增
     * 从session中获取权限，如果权限列表不包含该值，则不显示此按钮
     */
    String[] permission() default "";


}
